#include<stdio.h>
#include<sys/types.h>
#include<sys/ipc.h>
#include<sys/shm.h>
#include<unistd.h>
#include<stdlib.h>
#define PATH "/home/study/lesson8"
#define ID 0x6666
#define SIZE 4096

int main()
{
    key_t key = ftok(PATH, ID);
    if(key < 0){
        perror("ftok!\n");
        exit(1);
    }
    
    //创建共享内存
    int shm = shmget(key, SIZE, IPC_CREAT | IPC_EXCL| 0666);//为普通用户加上权限
    //开辟新的空间
    if(shm < 0){
        perror("shmget!\n");
        exit(2);
    }

    printf("the key is : %d\n", key);
    printf("the shm is : %d\n", shm);

    //关联共享内存和虚拟地址
    void* mem = shmat(shm, NULL, 0);
    if(mem == (void*)-1){
        perror("shmat");
        exit(1);
    }
    else{
        printf("shmat success!\n");
    }

    sleep(2);
    int flag = shmdt(mem);//再解除关联
    if(flag < 0){
        perror("shmdt");
        exit(1);
    } else printf("shmdt success!!!\n");
    //但是要注意，去关联不代表共享内存被释放了

    // //程序释放共享内存
    // sleep(5);
    // shmctl(shm, IPC_RMID, NULL);
    // printf("delete success!\n");
    // return 0;
}